.\" Copyright (C) 2022 Jens Axboe <axboe@kernel.dk>
.\"
.\" SPDX-License-Identifier: LGPL-2.0-or-later
.\"
.TH io_uring_prep_close 3 "March 13, 2022" "liburing-2.2" "liburing Manual"
.SH NAME
io_uring_prep_close \- prepare a file descriptor close request
.SH SYNOPSIS
.nf
.B #include <liburing.h>
.PP
.BI "void io_uring_prep_close(struct io_uring_sqe *" sqe ","
.BI "                          int " fd ");"
.PP
.BI "void io_uring_prep_close_direct(struct io_uring_sqe *" sqe ","
.BI "                                unsigned " file_index ");"
.PP
.fi
.SH DESCRIPTION
.PP
The
.BR io_uring_prep_close (3)
function prepares a close request. The submission queue entry
.I sqe
is setup to close the file descriptor indicated by
.IR fd .

For a direct descriptor close request, the offset is specified by the
.I file_index
argument instead of the
.IR fd .
This is identical to unregistering the direct descriptor, and is provided as
a convenience. Note that even though it's closing a direct descriptor, the
application must not set
.B IOSQE_FIXED_FILE
on the SQE. Otherwise the request will complete with
.B -EBADF
as the result.

These functions prepare an async
.BR close (2)
request. See that man page for details.

.SH RETURN VALUE
None
.SH ERRORS
The CQE
.I res
field will contain the result of the operation. See the related man page for
details on possible values. For closing of a direct descriptor, the only
failure cases are the kernel running completely out of memory, or if the
application has specified an invalid direct descriptor. Note that where
synchronous system calls will return
.B -1
on failure and set
.I errno
to the actual error value, io_uring never uses
.IR errno .
Instead it returns the negated
.I errno
directly in the CQE
.I res
field.
.SH SEE ALSO
.BR io_uring_get_sqe (3),
.BR io_uring_submit (3),
.BR close (2)
